/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mrp.web;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import mrp.beans.InsumoBean;
import mrp.entity.Insumo;
import org.primefaces.component.dialog.Dialog;
import org.primefaces.component.inputtext.InputText;

/**
 *
 * @author root
 */
@ManagedBean(name="insumoWeb")
@SessionScoped
public class InsumoWeb implements Serializable{
    @ManagedProperty("#{insumo}")
    private InsumoBean insumo;
    
    //_______________________________________________________________________________________________ 
    //----------------------------Componentes de ingreso--------------------------------
        private InputText textCodInsumo;
        private InputText textNombreInsumo;
        private InputText textFechaCreacion;
    
    //----------------------------Componentes de consulta--------------------------------
    //Atributos para cargar la tabla
        private List <Insumo> tablaDatosInsumo;
        private List <String> datosInsumoSeleccionado;
        private Insumo insumoSeleccionado; 
        
    //-----------------Componentes modificarDatos-----------------------    
        private Insumo insumoActualizarDatos;
    //-----------------fin Componentes modificarDatos-----------------------    
        
    //_______________________________________________________________________________________________  
    //********************metodos Getters and Setters***************************
    public InsumoBean getInsumo() {
        return insumo;
    }

    public void setInsumo(InsumoBean insumo) {
        this.insumo = insumo;
    }
   //-----------------Getters and Setters ingresar Insumo---------------------------    

    public InputText getTextCodInsumo() {
        return textCodInsumo;
    }

    public void setTextCodInsumo(InputText textCodInsumo) {
        this.textCodInsumo = textCodInsumo;
    }

    public InputText getTextFechaCreacion() {
        return textFechaCreacion;
    }

    public void setTextFechaCreacion(InputText textFechaCreacion) {
        this.textFechaCreacion = textFechaCreacion;
    }

    public InputText getTextNombreInsumo() {
        return textNombreInsumo;
    }

    public void setTextNombreInsumo(InputText textNombreInsumo) {
        this.textNombreInsumo = textNombreInsumo;
    }
    //-----------------Fin Getters and Setters ingresar Insumo---------------------------

    //-----------------Getters and Setters consultar Insumo--------------------------- 
    
    public List<String> getDatosInsumoSeleccionado() {
        return datosInsumoSeleccionado;
    }

    public void setDatosInsumoSeleccionado(List<String> datosInsumoSeleccionado) {
        this.datosInsumoSeleccionado = datosInsumoSeleccionado;
    }

    public Insumo getInsumoSeleccionado() {
        return insumoSeleccionado;
    }

    public void setInsumoSeleccionado(Insumo insumoSeleccionado) {
        this.insumoSeleccionado = insumoSeleccionado;
    }

    public List<Insumo> getTablaDatosInsumo() {
        return tablaDatosInsumo;
    }

    public void setTablaDatosInsumo(List<Insumo> tablaDatosInsumo) {
        this.tablaDatosInsumo = tablaDatosInsumo;
    }
    
    //-----------------fin Getters and Setters consultar Insumo--------------------------- 
    //-----------------Getters and Setters modificar Insumo---------------------------  
    public Insumo getInsumoActualizarDatos() {
        return insumoActualizarDatos;
    }
    public void setInsumoActualizarDatos(Insumo insumoActualizarDatos) {
        this.insumoActualizarDatos = insumoActualizarDatos;
    }
    //-----------------fin Getters and Setters modificar Insumo---------------------------

   //_______________________________________________________________________________________________    
   //*********************Metodos generales************************  
   public void setImputText(String form, String [] componente)// setea los imputText de vistas con los componentes de esta clase
   {
       javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
      
       javax.faces.component.UIViewRoot root = facesContext.getViewRoot();

       this.setTextCodInsumo((InputText)root.findComponent(form).findComponent(componente[0]));
       this.setTextNombreInsumo((InputText)root.findComponent(form).findComponent(componente[1]));                            
       this.setTextFechaCreacion((InputText)root.findComponent(form).findComponent(componente[2]));                            
    }
    public void resetComponentes()
    {        
        try{                  
            this.getTextCodInsumo().setValue("");
            this.getTextNombreInsumo().setValue("");  
            this.getTextFechaCreacion().setValue("");
        }
        catch(java.lang.NullPointerException npe)
        {
            System.out.println("-------------Excepcion en resetComponentes() "+npe);
        }
        System.out.println("-------------borrar datos");
    }  
    private List<String> getEstilosTodosComponentes(String metodo)
    {
        List<String>listaComponentesEstilos=new ArrayList<String>();
        if(metodo.equals("ingresarInsumo")||metodo.equals("modificarInsumo"))
        {
            listaComponentesEstilos.add(" width: 150px; font-size: 12px;left: 124px; top: 20px; position: absolute  ");
            listaComponentesEstilos.add(" width: 235px; font-size: 12px;left: 124px; top: 50px; position: absolute ");                      
            listaComponentesEstilos.add(" width: 150px; font-size: 12px;left: 124px; top: 80px; position: absolute ");                      
        }
      
        return listaComponentesEstilos;
    }
    private void setEstilosTodosComponentes(List<String>listaComponentesEstilos, String metodo)
    {
        if(metodo.equals("ingresarInsumo")||metodo.equals("modificarInsumo"))
        {
            this.getTextCodInsumo().setStyle(listaComponentesEstilos.get(0).toString());
            this.getTextNombreInsumo().setStyle(listaComponentesEstilos.get(1).toString());  
            this.getTextFechaCreacion().setStyle(listaComponentesEstilos.get(2).toString());  
        }                       
    }
    public boolean esCamposVacios(List<Object>listaComponentes, String metodo)
    {
        boolean vacio=false;
        
        if(metodo.equals("ingresarInsumo")||metodo.equals("modificarInsumo"))
        {
            List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
            for(int i=1;i<listaComponentes.size()-1;i++) // empieza en 1 porque el campo numeroLista se genera automaticamente al almacenar en la base de datos un nuevo registro
            {
                boolean isEmpty=true;
                try{
                    isEmpty=((InputText)listaComponentes.get(i)).getValue().toString().isEmpty();                     
                }
                catch(java.lang.NullPointerException npe){
                    isEmpty=true;
                }
                if(isEmpty)
                {
                    ((InputText)listaComponentes.get(i)).setStyle(listaComponentesEstilos.get(i)+";border-color: crimson");
                    vacio=true;
                   
                    javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
      
                    javax.faces.component.UIViewRoot root = facesContext.getViewRoot();
                    
                    if(metodo.equals("ingresarInsumo"))
                    {
                        this.mostrarDialogo("formDialogoIngresarInsumo", "DialogoIngresarInsumo", true);                        
                    }
                    else if(metodo.equals("modificarInsumo"))
                    {
                        this.mostrarDialogo("formDialogoModificarInsumo", "DialogoModificarInsumo", true);                        
                    }
                }
            }
        }        
        return vacio;
    }
   public void mostrarDialogo(String form, String componente, boolean visible)
   {
       javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
       javax.faces.component.UIViewRoot root = facesContext.getViewRoot();
       Dialog dialogo=(Dialog)root.findComponent(form).findComponent(componente);
       dialogo.setVisible(visible);
   }
  //_______________________________________________________________________________________________               
  //*********************Metodos ingresar Insumo*********************** 
   public void clicBotonResetearIngresarInsumo()
   {
       String form="formDialogoIngresarInsumo";
       String[] componentes={"textCodInsumo","textNombreInsumo","textFechaCreacion"};     
       this.setImputText(form, componentes);
       String metodo="ingresarInsumo";
       this.setEstilosTodosComponentes(this.getEstilosTodosComponentes(metodo), metodo);       
       this.resetComponentes();
   }
   public void clicBotonIngresarInsumo() ///boton guardar Insumo
   {
       String form="formDialogoIngresarInsumo";
       String[] componentes={"textCodInsumo","textNombreInsumo","textFechaCreacion"};       
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
       String metodo="ingresarInsumo";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextCodInsumo());
       listaComponentes.add( this.getTextNombreInsumo());                   
       listaComponentes.add( this.getTextFechaCreacion());
       
       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       //System.out.println("List<String>listaComponentesEstilos----- "+listaComponentesEstilos.get(0));
       if(!this.esCamposVacios(listaComponentes,metodo))
       {           
           this.getInsumo().setInsumo(new Insumo("",this.getTextNombreInsumo().getValue().toString().trim().toUpperCase(),
                                                 ""));
            if(this.getInsumo().ingresarInsumo())
            {
                this.resetComponentes();
                this.mostrarDialogo("formDialogoIngresarInsumo", "DialogoIngresarInsumo", false);
                this.buscarInsumo();
            }               
       }
       else
       {
           this.getInsumo().mostrarMensaje("error", "Error: Datos requeridos deben ser llenados", "");
           //this.mostrarConfirmDialogo("Ingresar Horma", "Error: Datos requeridos deben ser llenados");
       }
   }          
   //*********************fin Metodos ingresar Insumo************************
   
   //*********************    Metodos consultar Insumo************************
   public void buscarInsumo()
   {
        List <List> datos=this.getInsumo().consultarInsumo();
        this.setTablaDatosInsumo(datos.get(0));            
   }
   public void mostrarDatosDialogoDatosInsumo()
   {
        Insumo in=(Insumo)this.getInsumoSeleccionado();
        List<String> datos=new ArrayList<String>();
        datos.add("     Código Insumo:"+in.getCodInsumo());
        datos.add("            Insumo:"+in.getNombreInsumo());
        datos.add(" Fecha de Creación:"+in.getFechaCreacion());
        
        this.setDatosInsumoSeleccionado(datos);         
   }
   public void eventoFilaSeleccionadaTablaConsultarInsumo() 
   {//metodo carga los datos del ultimo Insumo seleccionado en el caso que se deseen actualizar
       Insumo in=(Insumo)this.getInsumoSeleccionado();      
       this.setInsumoActualizarDatos(in);       
       System.out.println("eventoFilaSeleccionadaTablaConsultarInsumo "+in.getCodInsumo());
   }
   //********************* fin Metodos consultar Insumo************************
   
   //*********************    Metodos modificar Insumo************************
   public void clicBotonModificarInsumo() //boton del toolbar
   {
       String form="formDialogoModificarInsumo";
       String[] componentes={"textCodInsumoModificar","textNombreInsumoModificar","textFechaCreacionModificar"};       
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
       String metodo="modificarInsumo";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextCodInsumo());
       listaComponentes.add( this.getTextNombreInsumo());                   
       listaComponentes.add( this.getTextFechaCreacion());
       
//       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
//       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       this.getTextCodInsumo().setValue(this.getInsumoActualizarDatos().getCodInsumo());
       this.getTextNombreInsumo().setValue(this.getInsumoActualizarDatos().getNombreInsumo());
       this.getTextFechaCreacion().setValue(this.getInsumoActualizarDatos().getFechaCreacion());
   }
   public void clicBotonActualizarDatosInsumo()
   {
       String form="formDialogoModificarInsumo";
       String[] componentes={"textCodInsumoModificar","textNombreInsumoModificar","textFechaCreacionModificar"};       
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
       String metodo="modificarInsumo";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextCodInsumo());
       listaComponentes.add( this.getTextNombreInsumo());                   
       listaComponentes.add( this.getTextFechaCreacion());
      
       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       if(!this.esCamposVacios(listaComponentes,metodo))
       {
           
           this.insumo.setInsumo(new Insumo(  this.getTextCodInsumo().getValue().toString(),
                                            this.getTextNombreInsumo().getValue().toString().trim().toUpperCase(),
                                            this.getTextFechaCreacion().getValue().toString().trim().toUpperCase()));
            System.out.println("--------______Componentes no vacios");    
            if(this.insumo.modificarDatosInsumo())
            {
                this.mostrarDialogo("formDialogoModificarInsumo", "DialogoModificarInsumo", false);
                this.resetComponentes();
                this.buscarInsumo();
            }            
       }
       else
       {
           this.insumo.mostrarMensaje("error", "Error: Datos requeridos deben ser llenados", "");          
       }
   } 
   //********************* fin Metodos modificar Insumo************************
   //*************************Metodos eliminar Insumo**************************
   public void clicBotonEliminarInsumo()
    {
        System.out.println("clicBotonEliminarInsumo Insumo para Eliminar: "+this.getInsumoActualizarDatos().getCodInsumo());
        String datosInsumoEliminar=this.getInsumoActualizarDatos().getCodInsumo();
        if(this.insumo.eliminarInsumo(this.getInsumoActualizarDatos().getCodInsumo()))
        {
            this.insumo.mostrarMensaje("info", "Se ha eliminado Insumo: "+datosInsumoEliminar,"");
            this.buscarInsumo();//recarga la tabla de datos de Insumo
            System.out.println("Insumo Eliminado: "+datosInsumoEliminar);
        }
        else
        {
            this.insumo.mostrarMensaje("error", "No se pudo eliminar Insumo: " +datosInsumoEliminar,"");
             System.out.println("No se pudo eliminar Insumo: "+datosInsumoEliminar);
        }
    }
   //*************************fin eliminar Insumo**************************
}
